#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

/*
一、常量指针  指向常量的指针
指向常量的指针 type const *p;或const type *p;
可以改变指向，不能用*p修改指向变量的值

二、指针常量
是常量，本身不能改变，也就是不能改变指向
因为指向不能改，必须初始化
但是可以通过取内容修改指向的内存中的内容

三、常量指针常量
指针本身是一个常量，指向的也是常量
const int *const p=&a;
不能改指向，不能修改指向的内存的内容
*/

int main()
{
	const int num=10; //必须初始化

    //一、
    int num1=12;
    int const * p=&num1; //  <===> const int * p=&num1; 
    printf("%0X %0X %d\n",&num1,p,*p);

    int val =9;
    p=&val;
    printf("%0X %0X %d\n",&val,p,*p);
    //*p=8;  //可以改变指向，不能用*p修改指向变量的值


    //二、
    int num2=9;
    int* const p_0=&num2;
    *p_0=20;
    printf("%p %d %d\n",p_0,*p_0,num2);

    //三、
    const int num3=18;
    int const val3 =9;

    const int* pNum=&num3;
    // pNum++;      可以
    // (*pNum)++;   不可以
    int const* pVal=&val3;
    // pVal++;      可以
    // (*pVal)++;   不可以

    const int*const ppNum=&num3;
    // ppNum++;     不可以
    // (*ppNum)++;  不可以
    int const*const ppVal=&val3;
    // pVal++;      不可以
    // (*pVal)++;   不可以

	//system("pause");
	return 0;
} 